package com.dizner.androidcarclient;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class LongPressButton extends Button {
    /**
     * 记录当前自定义Btn是否按下
     */
    private boolean clickdown = false;

    /**
     * 长按的回调接口
     */
    private LongTouchListener mListener;

    /**
     * 按钮长按时 间隔多少毫秒来处理 回调方法
     */
    private int mtime;

    /**
     * 构造函数
     *
     * @param context
     * @param attrs
     */
    public LongPressButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    /**
     * 处理touch事件
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            clickdown = true;
            new LongTouchTask().execute(mtime, null, null);

            Log.i("huahua", "按下");
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            clickdown = false;
            Log.i("huahua", "弹起");
        }
        return super.onTouchEvent(event);
    }

    /**
     * 使当前线程睡眠指定的毫秒数。
     *
     * @param time 指定当前线程睡眠多久，以毫秒为单位
     */
    private void sleep(int time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /**
     * 处理长按的任务
     */
    @SuppressLint("StaticFieldLeak")
    private class LongTouchTask extends AsyncTask<Integer, Void, Void> {

        @Override
        protected Void doInBackground(Integer... params) {
            mListener.onTouchStart(LongPressButton.this);
            while (clickdown) {
                try {
                    Thread.sleep(params[0]);
                    publishProgress();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            mListener.onTouchEnd(LongPressButton.this);
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            mListener.onLongTouch(LongPressButton.this);
        }

    }

    /**
     * 给长按btn控件注册一个监听器。
     *
     * @param listener 监听器的实现。
     * @param time     多少毫秒时间间隔 来处理一次回调方法
     */
    public void setOnLongTouchListener(LongTouchListener listener, int time) {
        mListener = listener;
        mtime = time;

    }

    /**
     * 长按监听接口，使用按钮长按的地方应该注册此监听器来获取回调。
     */
    public interface LongTouchListener {

        void onTouchStart(View view);

        void onTouchEnd(View view);

        /**
         * 处理长按的回调方法
         */
        void onLongTouch(View view);
    }
}
